package com.zhongge.book;

@SuppressWarnings("all")//屏蔽所有警告
/**
 * @ClassName BookList
 * @Description TODO 图书馆 好比模拟一个ArrayList集合
 * @Author zhongge
 * @Date 2025/7/14 15:22
 * @Version 1.0
 */
public class BookList {
    /**
     * 属性非必要基本都是使用private修饰的
     */
    //首先我初识默认有10本书（118期这个类是结合文件的操作实现的）
    private Book[] bookArr = new Book[10];

    //注意：在学习手搓数组的时候就学习过，数组还得有一个很重要的属性，就是：元素有效个数
    /**
     * usedSize即代表有效元素个数，有代表下标
     *  有效元素个数
     *  下标：当前最后一个有效元素的下一个位置（无论是在c语言还是在java这个都是一样的道理,在数据结构笔记中已经记得很详细了）
     */
    private int usedSize;//默认是0

    //使用一个构造方法（无论你定义什么类都得有的，所以说以后就不写注释了）
    public BookList() {
        //假设默认是有3本书
        bookArr[0] = new Book("三国演义", 12, "罗贯中", "小说");
        bookArr[1] = new Book("西游记", 13, "吴承恩", "小说");
        bookArr[2] = new Book("红楼梦", 32, "曹雪芹", "小说");

        usedSize = 3;
    }

    //理论上对图书的所有操作都写在这里，但是管理员有增加，普通用户有查阅
    //我们如何对他们进行分类的管理呢？？？
    //答案是我们可以在操作包中去完成!!!
    //具体如何做？？
    /**
     * 118期博哥的实现方法：
     * 你看 使用多态 的 知识来完成：父类是User
     * 那么  (user instansof AsminUser)  ==>代表是操作管理员的权限
     *      (user instansof NormalUser) ==>代表是操作用户的权限
     * 具体的实现就看operations包下的设计方法
     * 113期博哥的实现方式：
     *  博哥实现的方法是：遵循设计模式中的 “单一职责原则” 一个类只干一件事（具体请看画图板上的笔记）
     */

    public int getUsedSize() {
        return usedSize;
    }

    public void setUsedSize(int usedSize) {
        this.usedSize = usedSize;
    }

    public Book getBook(int pos) {
        return bookArr[pos];
    }

    public void setBook(int pos, Book book) {
        this.bookArr[pos] = book;
    }

    public Book[] getBookArr() {
        return bookArr;
    }

    public void setBookArr(int capacity) {
        //扩容
        Book[] tmp = new Book[capacity];
        for (int i = 0; i < usedSize; i++) {
            tmp[i] = this.bookArr[i];
        }
        this.bookArr = tmp;
    }
}
